class Proprety:
    def __init__(self, fget, fset=None, fdel=None):
        self.fget = fget
    
    def __get__(self, instance, owner):
        return self.fget(instance)
    
    def __set__(self, instance, value):
        if self.fset is None:
            raise AttributeError("can 't set attribute") 
        self.fset(instance, value)
        
    def __delete__(self, instance):
        if self.fdel is None:
            raise AttributeError("can't set attribute")
        self.fdel(instance)
    
    def setter(self, fn):
        self.fset = fn
        return self
    
    def deleter(self, fn):
        self.fdel = fn
        return self
     
     
class P:
    def __init__(self, age=18):
        self._age = age
    
    @Proprety  # age = Proprety(age)
    def age(self):
        return self._age
    
    @age.setter  #age = age.setter(age)
    def age(self, value):
        self._age = value
        
    @age.deleter
    def age(self):
        del self._age